package com.clstu.mhl.service;

import com.clstu.mhl.dao.BillDAO;
import com.clstu.mhl.dao.MenuDAO;
import com.clstu.mhl.domain.Bill;
import com.clstu.mhl.domain.DiningTable;
import com.clstu.mhl.domain.Menu;

import java.util.List;
import java.util.UUID;

/**
 * 根据需要写出方法调用DAO对数据库中的bill表操作
 */
public class BillService {

    //因为需要用到菜品的价格,所有引入MenuService
    static MenuService menuService = new MenuService();

    //改变餐桌状态,所以需要DiningTableService
    static DiningTableService diningTableService = new DiningTableService();
    static BillDAO billDAO = new BillDAO();

    //编写方法完成点菜的需求,生成一个账单表,同时修改餐桌信息(成功/失败)
    public boolean addBillByXx(String menuId,String nums,String tableId){
        //修改餐桌信息
        if(!diningTableService.setEatingById(tableId)) {
            System.out.println("异常情况,失败");
            return false;
        }
        //生成订单
        Menu menu = menuService.getById(menuId);
        String uuid = UUID.randomUUID().toString();
        double money = menu.getPrice() * (new Integer(nums));
        int i = billDAO.update("insert into bill values(null,?,?,? ,?,?,?,now(),'未结账')",
                uuid,menuId,menu.getName(),nums,money,tableId);
        return i>0;
    }

    //编写方法返回所有的账单信息
    public List<Bill> getBills(){
        return billDAO.queryMany("select * from bill order by tableId", Bill.class);
    }

    //编写方法实现结账功能,改账单状态,改餐桌状态
    public boolean payBillByTableId(String tableId,String mode){
        //修改餐桌信息
        if(!diningTableService.setEmptyById(tableId)) return false;
        //修改账单信息
        return billDAO.update("update bill set state=? where tableId=?", mode, tableId) > 0;
    }

    //编写方法根据餐桌id得到所有的账单信息
    public List<Bill> getByTableId(String tableId){
        return billDAO.queryMany("select * from bill where tableId = ?",Bill.class,tableId);
    }

}
